A central processing unit (CPU) as an arithmetic operation processing device that is mounted on an information processing device acquires data from an input/output (IO) device and performs processing thereon. In the information processing device, communication between the CPU and the IO device is usually performed via a device for communication (hereinafter, described as a “communication device”). Specifically, the communication device is a bridge or a switch, etc.
Each communication device performs communication in accordance with adopted standards. In order to implement high-speed processing, high-speed data transmission is adopted. Because of this, in recent years, there have been cases where the PCI Express (PCIe) standards capable of high-speed data transmission have been adopted.
In PCIe, data communication is performed by using the split transaction method. By using the split transaction method, it is possible for a device (requester) on the side that makes a request for data to transmit another request after transmitting a packet (request) for making a request without the need to wait for reception of a response (e.g., a completion, which is a response to a read request) from a respondent (completer). Because of this, it is possible to perform communication using packets more effectively. Usually, the respondent is an IO device.
In the split transaction method, there is a case where one IO device processes a plurality of requests. In the case where those requests are read requests, there is a possibility that completions for those requests will be transmitted in an order different from the order of request transmission. Because of this, the requester identifies a relationship of correspondence between requests and completions. It is possible to identify the relationship of correspondence by storing an identifier, which is called a tag, in a request.
Tags are finite resources. The number of tags that can be used is, for example, 32 or 256. Because of this, a requester selects one from among tags that can be used and attaches the tag to a request. On the other hand, a completer attaches the same tag as that which is included in the request to a completion. Due to this, it is possible for the requester to uniquely associate the request with the completion.
The tag attached to the request is returned when the completion to which the tag is attached is returned and the tag can be used again. However, the tag is a finite resource, and therefore, in the case where there is no longer a tag that can be used, a requester generates no more requests and the issuance of a new request is stopped.
In Patent documents 1 and 2, the following contents are disclosed.
A unique node ID is set to each module that is connected by the PCI-Express. Further, a dedicated channel is provided for writing data to a destination module (PUT transfer) and for reading data from the destination module (GET transfer), respectively, and a channel ID is set to each channel. Then, the node ID and the channel ID are set within the address part of the header of a transaction layer packet that is transferred in accordance with the PCI-Express, and at the same time, a packet type for distinguishing between a request and a response is set.
Then, for data transfer, only a memory write request packet that is routed in address routing is used. In the case of a request, a response is made by always using a response packet (a memory-write request packet of a response type).
Patent document 1: Japanese Laid-open Patent Publication No. 2006-302250
Patent document 2: Japanese Laid-open Patent Publication No. 2007-316755